Les outils de gestion de versions
Le meilleur ami du programmeur.
Travaux pratiques
Installer GIT
- Sous Windows : téléchargez l'assistant d'installation : http://msysgit.github.com/ (laisser les choix par défaut)
- Sous Mac OSX : téléchargez l'assistant d'installation : http://code.google.com/p/git-osx-installer
- Sous Mac OSX via "MacPort" : sudo port install git-core
- Sous Linux : apt-get install git
Pour les utilisateurs de Windows, il faut lancer l'application "GitBash". Pour les autres, utilisez le terminal.
Créer un compte BitBucket
Configuration
Pensez à préciser le même mail que pour BitBucket.
git config --global user.name "Robert Smith" git config --global user.email "robert@smith.com"
Créer un projet
Sur BitBucket, choisir "Create" dans la barre de menu.
Donnez un nom sans accents, sans espaces ni caractères spéciaux. Pour ce TP, on va utiliser le nom sandbox.
Seul le nom est obligatoire. A noter qu'il est possible d'utiliser un autre VCS : Mercurial.
Il est possible d'activer un wiki, et un système de suivi de ticket (issues tracking) pour chaque repository, c'est très pratique.
Attention à cocher la case "Private repository" si votre projet n'est pas open-source.
Mise en place du dépôt
D'abord, il faut créer sur votre machine un dossier qui contiendra le projet. C'est à vous de choisir l'emplacement.
Avec le terminal, rendez-vous dans le dossier vide que vous venez de créer.
Initiez le dépôt local avec la commande :
git init
On y défini le dépôt distant : Attention à indiquer la bonne adresse. Vous la trouverez sur la page de bitbucket, ou dans "i'm starting from scratch"
git remote add origin https://robert-smith@bitbucket.org/robert-smith/sandbox.git
Maintenant, nous avons un projet (vide), avec un dépôt local et un dépôt distant !
Ajouter le premier fichier
Créez un simple fichier "texte" et appellez le README.md.
Ecrivez une simple phrase à l'interieur : "Ceci est un projet pour tester GIT."
Ajouter le fichier
Vérifiez l'état actuel avec git status
git status
Ajoutez le fichier dans la zone "staging"
git add README.md
re-Vérifiez l'état actuel
git status
Valider ce fichier
git commit -m "Ajout du fichier d'information."
re-re-Vérifiez l'état actuel
git status
Vous pouvez aussi tester le log
git log
Enfin, publiez votre commit
git push origin master
"origin" corresponds au nom donné lors du "remote add". Il est possible d'avoir plusieurs remotes !
Le dépôt est publié
Regardez sur votre interface BitBucket, vous allez rapidement voir apparaitre votre commit, avec le commentaire.
Pour simuler un 2e utilisateur, nous allons cloner notre projet dans un autre dossier avec la même addresse que pour le "remote add", mais dans un autre dossier :
git clone https://robert-smith@bitbucket.org/robert-smith/sandbox.git sandbox2
Modifier
Dans le premier dossier, ajoutez un fichier Test.java qui contient le code suivant :
public class Test { public static void main(String[] args) { System.out.println("Test Start !"); for(int i=0; i < 5; i++) { System.out.println(i); } System.out.println("Test End."); } }
Une fois le fichier crée, faite en sorte, avec GIT, qu'il soit visible dans l'autre dossier, comme si vous travailliez à 2 sur ce projet.
Gérer les conflits
Une fois que le fichier est visible des 2 côtés et que les dépôts sont identiques, nous allons créer un conflit.
Modifiez dans un des dossiers le nombre de tours de la boucle : passez de 5 à 6 par exemple.
Publiez cette modification.
Sans mettre à jour, modifiez dans l'autre dossier le nombre en le passant de 5 à 4.
Tentez de publier cette modification : il y a conflit. A quel moment ? Comment GIT me l'indique ?
Editer à nouveau le fichier pour corriger le conflit en mettant une autre valeur, et publier le !
En bonus
Continuez à faire des modifications d'un côté pour les voir de l'autre. Générez des conflits. Modifiez une ligne et celle juste en dessus. Y a-t-il un conflit ?
Vous pouvez essayer aussi de récuperer les modification avec la commande git pull --rebase. Dans ce cas, vous verrez que ce qui générait un conflit avant ne le génere plus forcement ! Faites des essais !
Par exemple, supprimez une ligne d'un côté et modifiez cette ligne de l'autre. Cela générera un conflit, même avec un "rebase".